/**
 * responseHandler.js - 响应处理工具
 * 
 * 这个模块提供了用于生成一致的API响应的工具函数。
 * 它确保所有API响应具有一致的结构。
 */

/**
 * 成功响应处理器
 * 
 * @param {Object} res - Express响应对象
 * @param {Number} statusCode - HTTP状态码（默认为200）
 * @param {String} message - 可选的成功消息
 * @param {Object|Array} data - 响应数据
 * @returns {Object} Express响应对象
 */
const successResponse = (res, statusCode = 200, message = null, data = null) => {
  return res.status(statusCode).json({
    status: 'success',
    message,
    data,
  });
};

/**
 * 创建资源成功响应
 * 
 * @param {Object} res - Express响应对象
 * @param {String} message - 可选的成功消息
 * @param {Object|Array} data - 响应数据
 * @returns {Object} Express响应对象
 */
const createdResponse = (res, message = null, data = null) => {
  return successResponse(res, 201, message, data);
};

/**
 * 无内容成功响应
 * 
 * @param {Object} res - Express响应对象
 * @returns {Function} 用于发送无内容成功响应的函数
 */
const noContentResponse = (res) => {
  return () => res.status(204).end();
};

/**
 * 分页响应处理器
 * 
 * @param {Object} res - Express响应对象
 * @param {Number} statusCode - HTTP状态码（默认为200）
 * @param {String} message - 可选的成功消息
 * @param {Array} data - 分页数据
 * @param {Object} pagination - 分页信息对象
 * @returns {Object} Express响应对象
 */
const paginatedResponse = (res, statusCode = 200, message = null, data = [], pagination = {}) => {
  return res.status(statusCode).json({
    status: 'success',
    message,
    data,
    pagination,
  });
};

module.exports = {
  successResponse,
  createdResponse,
  noContentResponse,
  paginatedResponse,
};